//
// Created by Toosan on 2022/4/20.
//

#include "../day08/head/main2_head.h"

Person get_person(char *name) {
    Person person(name);
    cout<< "get_person &person = "<< &person << endl;
    /**
     * 这个return 理论分析 应该会执行person的拷贝函数，返回一个新的对象地址出去才对，但是日志没有这样走，奇怪。
     * 不知道是不是和编译器有关
     * logcat :
     * 两个参数构造0x64fd20
     * 一个参数构造 -- 0x64fd20
     * get_person &person = 0x64fd20
     * main &person = 0x64fd20
     * 123
     * 析构函数 Person 已被回收，准备释放内存
     *
     * 果然和编译器有关，使用Visual Studio编译打印日志与猜想的一样
     * 两个参数构造00CFF7C0
     * 一个参数构造 -- 00CFF7C0
     * get_person &person = 00CFF7C0
     * 拷贝函数
     * 拷贝函数 &person（被拷贝对象） = 00CFF7C0
     * 拷贝函数 this（当前对象） = 00CFF8D0
     * 析构函数 Person 已被回收，准备释放内存
     * main &person = 00CFF8D0
     * 析构函数 Person 已被回收，准备释放内存
     */
    return person;
}
/**
 * 这里也会涉及到拷贝函数，形参会拷贝一个生成新的对象
 * @param person
 */
void showPerson(Person person) {
    cout << "showPerson &person = " << &person << endl;
}

int main_day09_1() {
    Person person = get_person("Toosan");
    showPerson(person);
    cout<< "main &person = "<< &person << endl;
    return 0;
}